const removeKDigits =( num,  k)=> {
  for(let i=0; i<k; i++){
    let hasCut = false;
    //从左向右遍历，找到比自己右侧数字大的数字并删除
    for(let j=0; j<num.length-1;j++){
      if(num.charAt(j) > num.charAt(j+1)){
        num = num.substring(0, j) + num.substring(j+1,num.length);
        hasCut = true;
        break;
      }
    }
    //如果没有找到要删除的数字，则删除最后一个数字
    if(!hasCut){
      num = num.substring(0, num.length-1);
    }
  }
  //清除整数左侧的数字0
  let start = 0;
  for(let j=0; j<num.length-1; j++){
    if(num.charAt(j) !== '0'){
      break;
    }
    start++;
  }
  num = num.substring(start, num.length) ;
  //如果整数的所有数字都被删除了，直接返回0
  if(num.length === 0){
    return "0";
  }
  return num;
}

const removeKDigitsV2 = ( num,  k) =>{
  //新整数的最终长度 = 原整数长度 - k
  let newLength = num.length - k;
  //创建一个栈，用于接收所有的数字
  const stack = new Array(num.length);
  let top = 0;
  for (let i = 0; i < num.length; ++i) {
    //遍历当前数字
    let c = num.charAt(i);
    //当栈顶数字大于遍历到的当前数字，栈顶数字出栈（相当于删除数字）
    while (top > 0 && stack[top-1] > c && k > 0) {
      top -= 1;
      k -= 1;
    }
    //如果遇到数字0，且栈为空，0不入栈
    if('0' === c && top === 0){
      newLength--;
      if(newLength <= 0){
        return "0";
      }
      continue;
    }
    //遍历到的当前数字入栈
    stack[top++] = c;
  }
  // 用栈构建新的整数字符串
  return newLength<=0 ? "0" : stack.join('').substring(0,newLength) ;
}
const run = ()=>{
  console.log(removeKDigitsV2("1593212", 3));
  console.log(removeKDigitsV2("30200", 1));
  console.log(removeKDigitsV2("10", 2));
  console.log(removeKDigitsV2("541270936", 3));
  console.log(removeKDigitsV2("1593212", 4));
  console.log(removeKDigits("1000020000000010", 2));
}
run()